c语言,函数的参数为二维指针的问题
#include <stdio.h>
void lian(char **);
int main(void)
{
    int shu[2][3] = { {1,2,3}, {4, 5, 6} };
    printf("shu point is %p\n", shu);
    printf("*shu point is %p\n", *shu);
    lian(shu);

    system("pause");
    return 0;
}
void lian(char *shu[8])
{
    printf("shu point is %p\n", shu);
    printf("*shu point is %p\n", *shu);
}
------------------------------------------------------------
shu point is 001DFD84
*shu point is 001DFD84
shu point is 001DFD84
*shu point is 00000001
请按任意键继续. . .

很感谢能回答我的问题
我的问题是main函数中shu的值是001DFD84
而( * shu)的值是001DFD84
而在lian函数中,其shu有相同的值
为什么 * shu变了;
虽然参数为 shu[8],但其只传递main中shu的值001DFD84
而参数其实由8个指针组成的数组,近似于二位指针;可以做
操作,
为什么会改变。
谢谢解答我的疑问

4个回答

char *shu[8])改成int (*shu)[3] ,前者代表指正数组,后者代表数组指针。而且两者数据类型不一样

#include
#include

void lian(int (*shu)[3]);
int main(int argc ,char** argvs)
{
int shu[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
printf("shu point is %p\n", shu);
printf("*shu point is %p\n", *shu);

lian(shu);

system("pause");
return 1;

}
void lian(int (*shu)[3])
{
printf("shu point is %p\n", shu);
printf("*shu point is %p\n", *shu);
}

void lian(char *shu[8])
{
printf("shu point is %p\n", shu);
printf("*shu point is %p\n", *shu);
}
*shu --》 shu[0] 本质上是一个char型的变量, 其变量地址自然和 int型的地址不一致,建议从这个角度去考虑

izml5135
izml5135 buhui
一年多之前 回复
Eagle_hwei
Eagle_hwei 但是我试了一下;改成int情况并没有改变
一年多之前 回复
Eagle_hwei
Eagle_hwei 谢谢您的回答
一年多之前 回复

赞成楼上。这种转换在VS2012中已不被支持。指针类型不同。一个是char一个是int.

如果从钻研编译器的角度,可以考虑;如果研究编程,这种问题不建议继续。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言二维指针作为参数的问题。
#include<stdio.h> int stringcut(char *str, char dest[][50],int num,int lines) /*如果这里不加上50会出错*/ { char *temp=str; int k=0; if(strlen(str) ==NULL) { return -1; } for(k=0;k<lines;k++) { strncpy(dest[k],temp,num); temp=temp+num; } return 0; } main() { char str[]="abcdefghijklmnopqrstuvwxyz"; char dest[3][50]; int ret; memset(dest,0,150); ret=stringcut(str,dest,5,3); if(ret!=0) { printf("failse\n"); } printf("[%s]\n",dest[0]); printf("[%s]\n",dest[1]); printf("[%s]\n",dest[2]); } 请问写一个函数为二维数组赋值的时候,二维数组作为参数,应该怎么写,为什么?上面注释的地方为什么去掉50的时候就报错? 不知道为什么参数不能写成char **dest,如果这样,程序会崩溃!
C语言函数返回指针和数组的区别
我的函数返回一个二维数组如下: ``` double** inverse(double (**data)) { double result[2][2]; result[0][0] = data[1][1] / (data[0][0] * data[1][1] - data[0][1] * data[1][0]); result[0][1] = -data[0][1] / (data[0][0] * data[1][1] - data[0][1] * data[1][0]); result[1][0] = -data[1][0] / (data[0][0] * data[1][1] - data[0][1] * data[1][0]); result[1][1] = data[0][0] / (data[0][0] * data[1][1] - data[0][1] * data[1][0]); return result; } ``` 然后函数外面用一个二维指针去接: ``` double** s = inverse(gama[FreIdx]); printf("%f\n", s[0][0]); ``` 但是报错了,说s的内存地址无法访问。求解释一下,对C不是很熟
c语言关于二维数组名和二维指针的问题,求帮忙看下,谢谢
定义如下函数 void fun(int **array, int m, int n); 在调用这样的函数的时候,需要注意一下,如下面的例子: int a[3][3] = { {1, 1, 1}, {2, 2, 2}, {3, 3, 3}}; fun(a, 3, 3); 根据不同编译器不同的设置,可能出现warning 或者error,可以进行强制转换如下调用: fun((int**)a, 3, 3); 为什么 不能直接用数组名,它和二维指针有什么区别?
关于C语言的指针数组的问题
老师说过 传递一个二维数组时 必须指定 第二维的 个数 才能正确索引 数组1维+1的位置 函数参数传递 都是写成这样 abc(int* array[10]) 但是看到main函数的 参数确是 int main(int argc, char* argv[], char* env[]) 这样写 能索引argv+1 的位置吗?
51单片机C 怎么调用带指针的函数
代码 ``` /********************二维码扫描读取*********************/ //*output_data:数据指针,输出扫描后的二维码 //return:返回0->无错误,1->读取超时 unsigned char Cam_fun(unsigned char *output_data); ``` 请问怎么把 ***output_data** 中的值取出来
C语言菜鸟 想问一下这个程序哪里有错误(关于指针和数组的问题)谢谢!
#include <stdio.h> #include <stdlib.h> #define N 5 #define M 3 void duru(int score[][M],long num[],int n) { int i,j; printf("Input student's ID and score as:MH EN PH:\n"); for(i=0;i<N;i++) { scanf("%ld",&num[i]); for(j=0;j<M;j++) { scanf("%d",&score[i][j]); } } } void aver(int score[][M],int n) { int i; float aver; float sum=0; for(i=0;i<N;i++) { sum=sum+score[i][0]; } aver=sum/N; printf("第一门课程平均数为%.2f\n",aver); } void fail(double(*p)[M]) { int i,j,count=0; double sum=0; for(i=0;i<N;++i) { count=0; sum=0; for(j=1;j<M;++j) { if(*(*(p+i)+j)<60) { count++; } } if(count>=2) { for(j=1;j<M;j++) { sum+= *(*(p+i)+j); } printf("该学生有超过两门以上课程不及格\n"); printf("\n平均成绩为%.3f\n",sum/M); } } } void youxiu(double(*p)[M]) { int i,j,count=0; double sum=0; for(i=0;i<N;i++) { count=0; sum=0; for(j=1;j<M;j++) { sum+=*(*(p+i)+j); if(*(*(p+i)+j)>=85) { count++; } } if(count==M) { printf("该学生全部课成绩在 85 分以上\n"); printf("\n平均成绩为%.3f\n",sum/M); } else( sum/M >= 90) { printf("该学生所有成绩平均分在 90 分以上\n"); printf("\n平均成绩为%.3f\n",sum/M); } } } int main() { int iSelect=1; int score[N][M],sum[N],n; long num[N]; printf("Input the total number of the students(n<=5):"); scanf("%d",&n); while(iSelect!=0) { printf(" Menu \n"); printf("**************************************************************************************\n"); printf("*1.任务1:录入每个学生的学号和成绩; *\n"); printf("*2.任务2:求第一门课的平均分; *\n"); printf("*3.任务3:找出有 2 门以上课程不及格的学生, 输出他们的学号、全部课程成绩、平均成绩; *\n"); printf("*4.任务4:找出平均成绩 90 分以上或全部课成绩在 85 分以上的学生。 *\n"); printf("*5.退出 *\n"); printf("**************************************************************************************\n"); scanf("%d",&iSelect); switch(iSelect) { case 1: duru(score,num,n); break; case 2: aver(score,n); break; case 3: fail(score,num,n); break; case 4: youxiu(score,num); break; case 5: break; } } return 0; } 有一个班 5 个学生,3 门课。用二维数组作函数参数编程实现如下菜单 驱动的学生成绩管理系统: (1) 录入每个学生的学号和成绩; (2) 求第一门课的平均分; (3) 找出有 2 门以上课程不及格的学生, 输出他们的学号、全部课程成绩、平均成绩; (4) 找出平均成绩 90 分以上或全部课成绩在 85 分以上的学生。 (5) 退出 要求:分别编 4 个函数,通过指针运算实现以上 4 个功能。
C语言 字符串指针排序函数
下面这个是用冒泡排序,运行错误 ``` #include<stdio.h> #include<string.h> #define N 5 int main() { char ptr[N][80]={ "how ","are ","you ","i","fine" }; char *p[N]; char *temp; int i,j; for(i=0;i<N;i++) p[i]=ptr[i]; for(i=0;i<N-1;i++) for(j=0;j<N-i;j++) if(strcmp(p[j],p[j+1])>0) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } for(i=0;i<N;i++) puts(p[i]); } ``` 下面这个是用选择排序,运行结果却是正确的 ``` #include<stdio.h> #include<string.h> #define N 5 int main() { char ptr[N][80]={ "how ","are ","you ","i","fine" }; char *p[N]; char *temp; int i,j; for(i=0;i<N;i++) p[i]=ptr[i]; for(i=0;i<N-1;i++) for(j=i+1;j<N;j++) if(strcmp(p[i],p[j])>0) { temp=p[j]; p[j]=p[i]; p[i]=temp; } for(i=0;i<N;i++) puts(p[i]); } ``` 下面这个没有用指针,直接改变原字符串数组,是用冒泡排序 也是正确的 ``` #include<stdio.h> #include<string.h> #define N 5 int main() { char ptr[N][80]={ "how ","are ","you ","i","fine" }; char temp[80]; int i,j; for(i=0;i<N-1;i++) for(j=0;j<N-i;j++) if(strcmp(ptr[j],ptr[j+1])>0) { strcpy(temp,ptr[j]); strcpy(ptr[j],ptr[j+1]); strcpy(ptr[j+1],temp); } for(i=0;i<N;i++) puts(ptr[i]); } ``` 求解答,万分感谢!
关于c语言指向一位数组指针用法的详细解释(C语言程序设计例题)
![图片说明](https://img-ask.csdn.net/upload/201703/22/1490193489_316173.jpg) 书中说形参(pointer是一个指向包含4个元素的一位数组指针这我能理解) 1.但是为什么(score[][4]明明是个二维数组,为什么可以将首地址作为一位数组的指针传进函数里?) 2.还有就是(pt是一个float指针,pointer也是指针为什么要写pt=*(pointer+n)) 下面有我自己打的简易代码,得到的结果是对的,但是不太明白原理,望大佬为我解惑谢谢 ``` #include<stdio.h> using namespace std; int main() { float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}; //这个不是个二维数组吗? float *search(float (*pointer)[4],int n); float *p; int i,m; printf("enter:"); scanf("%d",&m); printf("m:%d\n",m); p=search(score,m); for(i=0;i<4;i++){ printf("%5.2f\t",*(p+i)); } return 0; } float *search(float (*pointer)[4],int n){ float *pt; pt=*(pointer+n); /*这里为什么要加*取pointer所指向的元素(pointer不是自己的值就是地址吗)*/ return(pt); } ```
C中指向double型的指针作形参,在运算编译的时候报错,不知道原因?
本题的实现要求用函数实现,主函数只负责进行函数调用。函数的参数要求全部用到的情况是:  用数组名作函数参数;  用指向数组元素的指针变量作函数参数;  用指向一维数组的指针变量作函数参数; 题目:输入两个行、列数相同的矩阵(实际上是二维数组)A、B,以矩阵的方式分别输出A、B;求矩阵的和并输出;求出每个矩阵中的最大值及其位置;求出每个矩阵中绝对值最大的元素及其位置。下面的各要求通过编写函数实现: ① 输入矩阵(实际上是二维数组); ② 输出矩阵; ③ 求出两个矩阵的和。设A=(aij)m×n,B=(bij)m×n,则C=A+B=(cij)m×n,cij= aij+ bij; ④ 求矩阵中的最大值及其位置; ⑤ 求矩阵中绝对值最大的元素及其位置。 # 程序一直没有编译成功 附上报错图 ![图片说明](https://img-ask.csdn.net/upload/201901/06/1546704478_924396.png) ``` #include<stdio.h> #define M 4 #define N 4 int input_A(double a[][N]) { int j,k; printf("Please input A:\n"); for(j=0;j<M;j++) for(k=0;k<N;k++) { scanf("%5d",&a[j][k]); } } int input_B(double b[][N]) { int j,k; printf("Please input B:\n"); for(j=0;j<M;j++) for(k=0;k<N;k++) { scanf("%5d",&b[j][k]); } } int output(double a[][N],double b[][N]) { int j,k; printf("output A:\n"); for(j=0;j<N;j++) { for(k=0;k<N;k++) { printf("%5d",a[j][k]); } printf("\n"); } printf("output B:\n"); for(j=0;j<N;j++) { for(k=0;k<N;k++) { printf("%5d",b[j][k]); } printf("\n"); } } double sum(double *p,double *q,double *c[N]) { int j,k; double sum; for(j=0;j<N;j++) for(k=0;k<N;k++) { c[j][k]=*(*(p+j)+k)+*(*(q+j)+k); } for(j=0;j<N;j++) for(k=0;k<N;k++) { sum=sum+*(*(c+j)+k); } printf("总和为%lf",sum); } int max(double *p,double *q) { double *ma,*mb; int j,k,jm,km; ma=p;mb=q; for(j=0;j<N;j++) { for(k=0;k<N;k++) { if(*(*(p+j)+k)>*ma) { jm=j; km=k; *ma=*(*(p+j)+k); } } } printf("A矩阵中最大值为%lf,位置:%d行%d列\n",*ma,j+1,k+1); for(j=0;j<N;j++) { for(k=0;k<N;k++) { if(*(*(q+j)+k)>*mb) { jm=j; km=k; *mb=*(*(q+j)+k); } } } printf("B矩阵中最大值为%lf,位置:%d行%d列\n",*mb,j+1,k+1); } int abs_max(double a[][N],double b[][N]) { double *ma,*mb; int j,k,jm,km; ma=a[0][0];mb=b[0][0]; for(j=0;j<N;j++) { for(k=0;k<N;k++) { if(((a[j][k]>=0)?a[j][k]:-a[j][k])>*ma) { jm=j; km=k; *ma=a[j][k]; } } } printf("A矩阵中绝对最大值为%lf,位置:%d行%d列\n",*ma,j+1,k+1); for(j=0;j<N;j++) { for(k=0;k<N;k++) { if(((b[j][k]>=0)?b[j][k]:-b[j][k])>*mb) { jm=j; km=k; *mb=b[j][k]; } } } printf("B矩阵中绝对最大值为%lf,位置:%d行%d列\n",*mb,j+1,k+1); } main() { double A[M][N],B[M][N],C[M][N]; input_A(A); input_B(B); output(A,B); sum(A,B,C); max(A,B); abs_max(A,B); } ``` 新手一枚 谢谢大佬们指教 下面是根据评论区大神建议修改后的代码: ``` #include<stdio.h> #define M 4 #define N 4 int input_A(double a[][N]) { int j,k; printf("Please input A:\n"); for(j=0;j<M;j++) for(k=0;k<N;k++) { scanf("%lf",&a[j][k]); } } int input_B(double b[][N]) { int j,k; printf("Please input B:\n"); for(j=0;j<M;j++) for(k=0;k<N;k++) { scanf("%lf",&b[j][k]); } } int output(double a[][N],double b[][N]) { int j,k; printf("output A:\n"); for(j=0;j<N;j++) { for(k=0;k<N;k++) { printf(" %5.2lf ",a[j][k]); } printf("\n"); } printf("output B:\n"); for(j=0;j<N;j++) { for(k=0;k<N;k++) { printf(" %5.2lf ",b[j][k]); } printf("\n"); } } double sum(double (*p)[N],double (*q)[N],double (*c)[N]) { int j,k; double sum; for(j=0;j<N;j++) for(k=0;k<N;k++) { c[j][k]=*(*(p+j)+k)+*(*(q+j)+k); } for(j=0;j<N;j++) for(k=0;k<N;k++) { sum=sum+*(*(c+j)+k); } printf("总和为%.2lf\n",sum); } int max(double (*p)[N],double (*q)[N]) { double *ma,*mb; int j,k,jm,km; ma=*p;mb=*q; for(j=0;j<N;j++) { for(k=0;k<N;k++) { if(*(*(p+j)+k)>*ma) { jm=j; km=k; ma=*(p+j)+k; } } } printf("A矩阵中最大值为%lf,位置:%d行%d列\n",*ma,jm+1,km+1); for(j=0;j<N;j++) { for(k=0;k<N;k++) { if(*(*(q+j)+k)>*mb) { jm=j; km=k; mb=*(q+j)+k; } } } printf("B矩阵中最大值为%lf,位置:%d行%d列\n",*mb,jm+1,km+1); } int abs_max(double a[][N],double b[][N]) { double *ma,*mb; int j,k,jm,km; ma=&a[0][0];mb=&b[0][0]; for(j=0;j<N;j++) { for(k=0;k<N;k++) { if(((a[j][k]>=0)?a[j][k]:-a[j][k])>*ma) { jm=j; km=k; ma=&a[j][k]; } } } printf("A矩阵中绝对最大值为%lf,位置:%d行%d列\n",*ma,jm+1,km+1); for(j=0;j<N;j++) { for(k=0;k<N;k++) { if(((b[j][k]>=0)?b[j][k]:-b[j][k])>*mb) { jm=j; km=k; mb=&b[j][k]; } } } printf("B矩阵中绝对最大值为%lf,位置:%d行%d列\n",*mb,jm+1,km+1); } main() { double A[M][N],B[M][N],C[M][N]; input_A(A); input_B(B); output(A,B); sum(A,B,C); max(A,B); abs_max(A,B); } ``` 可以_正常运行_
如何卸载assembly?或者class
.net的动态编译功能很好,但是有个问题,动态编译的代码,每次执行后,都会产生一个新的assembly,而且无法卸载。这个动态方法执行多次之后,就会慢慢的内存泄漏。因为每个assembly都会占用内存。 google了一下,没有发现满意的答案。唯一的答案就是,把assembly放到一个appdomain里,然后所在的appdomain卸载掉。但如果这样的话,所有的东西都得通过rpc调用了,效率非常低。 从原理上来说,已经加载的class,应该是可以卸载的。不知道是否有办法调用原生的api去卸载一个已经加载的assembly。 [b]问题补充:[/b] 我的问题是,需要实现一个脚本操作的功能,对已有的数据进行处理,并且用到linq查询,然后返回查询的结果。 查询的逻辑是未知的,由客户输入脚本来实现。查询的结果是一个二维表。但是希望查询结果返回的数据结构是自描述的。为了简化问题,就用了linq的匿名对象。 现在的做法,是用动态编译的方法,用CSharpCodeProvider动态编译客户输入的那段代码,产生一个CompilerResult,这个地方的问题的实质,是需要一个编译器。现在为了省事,就调用了c#的编译器,但是后果就是每次执行一个脚本,就会生成一个Assembly。长期执行下去,内存会慢慢变少。因此希望能将这个Assembley卸载。 Expresstion Tree比较麻烦,因为问题就是要做语法分析,如果已经成了Tree就不需要做了。 感谢RednaxelaFX兄的解答,我想xie卸载程序集还是有可能的。理由是:第一,有些.net代码保护工具,就可以让clr把已经加载的类卸载,防止别人dump整个程序集。第二,Dlr的类是动态生成的。如果无法卸载动态生成的类,等着它的必定是内存泄漏。 从编程语言的发展趋势看,总的趋势是越来越灵活。开始阶段,是针对硬件的汇编,然后是对硬件的具体实现有一定抽象作用的c语言,再到有oo特性的c++,然后是继承了GC和更过oo特性的java和c#。现在的趋势是,对编程语言本身进行编程,表现就是Aop和动态语言。 动态语言,它需要的除了动态编译以为,就是对把gc的特性扩展到类的类型本身。当一个类的代码不再被需要,它也可以被GC。我以为,动态的创建和销毁代码,也是非常必要的。它实际上是未来编程语言的一个方向。 [b]问题补充:[/b] 再次感谢RednaxelaFX兄的热情解答。使我明白DLR是怎么实现的。 ironpython是个好主意。可惜我要的不仅仅是脚本,还需要linq的查询结果。如果用ironPython的话,它返回给我的是个动态类型,虽然可以动态增加删除成员,奈何我还要对返回的数据进行处理。如果不是.net的数据控件支持的类型,我还得开发一堆数据控件或者adapter去支持它的类型,比较麻烦,我还没做好成为ironpython的开发人员的心理准备。最理想的办法,就是能卸载assembly。这样工作量就是最小的。其实,不卸载也是无所谓的,因为我可以把写好的脚本缓存起来,不必每次都生成新的assembly。客户也不会无聊到写很多脚本故意把它搞崩溃。 之所以研究这个问题,纯属心理上的洁癖,想让它有个更好的解决方案。 关于.net保护工具如何让已经加载的类重新被卸载的问题,我也不知道答案,作者也没有公布。因为这可能就是他保护技术的核心。我想,如果有办法能让程序回到一个程序集加载之前的状态,就算是完成了卸载操作。如果确信程序集不再被引用,那么应该有办法完成这个操作。不过,这一定需要非常了解clr的底层结构。 .net没有提供加载的类卸载的方法,只是出于安全性的理由,这个类可能被别的代码引用,卸载了它,就可能会出现野指针。 此外,如果类可以卸载,那么有些静态构造函数的语义,可能会被改变。因为重新加载类的时候,静态构造函数可能会再次执行。 如果类也增加引用计数之类的机制,那么,类本身也应该是可以被gc的。 既然代码可以动态的创建,那为什么不可以动态的删除?既然对对象的GC可以做到,那么对类型的GC,一样可以做到。这不过是编程语言设计者观念上的问题,不是不可逾越的障碍。 静态编译,不过是为了提高运行效率而已。如果效率可以接受,那静态编译对于编程思想的表达,并不是必须的。 也就是说,动态的产生类,动态的销毁类,完全是可行的。类也不过是数据而已。
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
python学习方法总结(内附python全套学习资料)
不要再问我python好不好学了 我之前做过半年少儿编程老师,一个小学四年级的小孩子都能在我的教学下独立完成python游戏,植物大战僵尸简单版,如果要肯花时间,接下来的网络开发也不是问题,人工智能也可以学个调包也没啥问题。。。。。所以python真的是想学就一定能学会的!!!! --------------------华丽的分割线-------------------------------- ...
兼职程序员一般可以从什么平台接私活?
这个问题我进行了系统性的总结,以下将进行言简意赅的说明和渠道提供,希望对各位小猿/小媛们有帮助~ 根据我们的经验,程序员兼职主要分为三种:兼职职位众包、项目整包和自由职业者驻场。 所谓的兼职职位众包,指的是需求方这边有自有工程师配合,只需要某个职位的工程师开发某个模块的项目。比如开发一个 app,后端接口有人开发,但是缺少 iOS 前端开发工程师,那么他们就会发布一个职位招聘前端,来配合公司一...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
JAVA 基础练习题
第一题 1.查看以下代码,并写出结果 public class Test01 { public static void main(String[] args) { int i1 = 5; boolean result = (i1++ &gt; 5) &amp;&amp; (++i1 &gt; 4); System.out.println(result); Sy...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
C++知识点 —— 整合(持续更新中)
本文记录自己在自学C++过程中不同于C的一些知识点,适合于有C语言基础的同学阅读。如果纰漏,欢迎回复指正 目录 第一部分 基础知识 一、HelloWorld与命名空间 二、引用和引用参数 2.1引用的定义 2.2 将引用用作函数参数 2.3 将引用用于类对象 2.4 引用和继承 2.5 何时使用引用参数 2.6 引用和指针的区别 三、内联函数 四、默认参数的...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
Python实例大全(基于Python3.7.4)
博客说明: 这是自己写的有关python语言的一篇综合博客。 只作为知识广度和编程技巧学习,不过于追究学习深度,点到即止、会用即可。 主要是基础语句,如三大控制语句(顺序、分支、循环),随机数的生成,数据类型的区分和使用; 也会涉及常用的算法和数据结构,以及面试题相关经验; 主体部分是针对python的数据挖掘和数据分析,主要先攻爬虫方向:正则表达式匹配,常用数据清洗办法,scrapy及其他爬虫框架,数据存储方式及其实现; 最后还会粗略涉及人工智能领域,玩转大数据与云计算、进行相关的预测和分析。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
机械转行java自学经历,零基础学java,血泪总结的干货
机械转行java自学经历,零基础学java,血泪总结的干货 据说,再恩爱的夫妻,一生中都有100次想离婚的念头和50次想掐死对方的冲动。 求职路上亦是如此,打开这篇文章,相信你也有转行的想法。和身边的朋友聊过,入职后的他们,或多或少对现在的职位都有些不满,都有过转行的冲动。 可他们只是想,而我真的这样做了。 下面就介绍下我转行的血泪史。 我为什么要转行 高中复读了一年,考了个双非院校的机械。当时...
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
【Linux系统编程】Linux信号列表
00. 目录 文章目录00. 目录01. Linux信号编号02. 信号简介03. 特殊信号04. 附录 01. Linux信号编号 在 Linux 下,每个信号的名字都以字符 SIG 开头,每个信号和一个数字编码相对应,在头文件 signum.h 中,这些信号都被定义为正整数。信号名定义路径:/usr/include/i386-linux-gnu/bits/signum.h 要想查看这些信号和...
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
借助AI力量,谷歌解开生命奥秘?
全文共4484字,预计学习时长8分钟 Paweł Czerwiński发布在 Unsplash上的原图 假如疾病不复存在会发生什么?如果我们能像大自然一样迅速获取能量又会发生什么?要是我们能够在极短时间内循环塑料、废油、或其它的一些物质呢?如果人类能够解开生命的奥秘,那么以上这些想象将在未来成为现实。人工智能企业DeepMind的数据科学分析师日前在此领域有了重大发现。以下为具体内容:...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
Python3.7黑帽编程——病毒篇(基础篇)
引子 Hacker(黑客),往往被人们理解为只会用非法手段来破坏网络安全的计算机高手。但是,黑客其实不是这样的,真正的“网络破坏者”是和黑客名称和读音相似的骇客。 骇客,是用黑客手段进行非法操作并为己取得利益的人。黑客,是用黑客手段为国家或单位做事的人。 那么,既然黑客不是一个很坏的职业,我们就可以去试着学习。 黑客本身的初衷 ——黑客其实一直是善良的。 骇客其实他的前身就是黑客。 骇客与黑客分家...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
了解了这些,轻松拿offer——Java面试之道
本篇文章将讲述Java基础中的面试题及其解答,希望对大家有所帮助。 synchronized和Lock的区别 synchronized是JVM层面实现的,java提供的关键字,Lock是API层面的锁。 synchronized不需要手动释放锁,底层会自动释放;Lock则需要手动释放锁,否则有可能导致死锁 synchronized等待不可中断,除非抛出异常或者执行完成;Lock可以中断,通过in...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
相关热词 c#委托 逆变与协变 c#新建一个项目 c#获取dll文件路径 c#子窗体调用主窗体事件 c# 拷贝目录 c# 调用cef 网页填表c#源代码 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天
立即提问