返回值是数组,主函数应该如何调用

我想输出子函数里面的a数组,这段代码为什么不行呢?

#include<stdio.h>
#include<string.h>

char *fun()
{
    char a[] = {'1','2'};
    return a;
}

int main()
{
    char *b;
    b = fun();
    printf("%s", b );
}

3个回答

char *fun()
{
    static char a[] = {'1','2'};
    return a;
}

函数部分改成这样就可以了

你错误的原因是:
你让函数返回了一个指针让b指向它是不假,

但是 这个函数中返回的指针a是一个局部变量, 返回之后, 指针a就会被释放掉, a数组的内容也不存在了

那么此时 b指向了哪里呢 指向的目标a数组已经消失了
指向了被撤销的内存地址 而这个地址上的内容已经没了

此时你再打印b的内容当然打不出来

你这个问题应该是栈内存跟堆内存的区别,如果指针指向函数的局部变量(存储在栈内)返回值时,当函数执行完了就会释放掉栈内存数据,最后你的指针指向了被释放的内存块,里面的数据是垃圾数据。

#include <stdio.h>
#include<string.h>
#include <stdlib.h>


char *fun()
{
//    char a[] = {'1','2'};
    char *a = (char *)malloc(3*sizeof(char));
    memset(a,0x0,3);
    a[0] = '1';
    a[1] = '2';
    return a;
}

int main()
{
    char *b;
    b = fun();
    printf("%s", b );
}

如果不对,欢迎指正

#include<stdio.h>
#include<string.h>

char fun(char* b)
{
    char a[] = {'1','2'};
    strcpy(b, a);
}

int main()
{
    char b;
    fun(&b);
    printf("%s", &b );
}

望采纳,谢谢

weixin_42375906
Rotch 相当于把 b的地址传进去,通过修改b对应的值来实现更改b的值。Windows编程的很多 API 都是这个原理,多学习学习语法,加油
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何调用函数打印出数组
我已经编写了函数itob(n,s,d),将整数n转换为以b为底的数,并将转换结果以字符形式保存到字符串s中。请问既然函数的返回值不能是数组,那么如何在main 函数中调用这个itob函数打印出字符串s?(刚入门的新手,很多函数没有学)
怎样将二维数组作为函数返回值并在主函数中调用
我的调用函数是这样的: float(*TIME(float f_1[3][100]))[100] { for(i=0;i<=2;i++) { L_1[i][0]=-(a_1*f_1[i][0-3+100]+a_2*f_1[i][0-2+100]+a_3*f_1[i][0-1+100]+a_4*f_1[i][0]+a_5*f_1[i][0+1]+a_6*f_1[i][0+2]); L_1[i][1]=-(a_1*f_1[i][1-3+100]+a_2*f_1[i][1-2+100]+a_3*f_1[i][1-1]+a_4*f_1[i][1]+a_5*f_1[i][1+1]+a_6*f_1[i][1+2]); L_1[i][2]=-(a_1*f_1[i][2-3+100]+a_2*f_1[i][2-2]+a_3*f_1[i][2-1]+a_4*f_1[i][2]+a_5*f_1[i][2+1]+a_6*f_1[i][2+2]); for(j=3;j<=99;j++) { L_1[i][j]=-(a_1*f_1[i][j-3]+a_2*f_1[i][j-2]+a_3*f_1[i][j-1]+a_4*f_1[i][j]+a_5*f_1[i][j+1]+a_6*f_1[i][j+2]); } } return L_1; } 在主函数中调用时,用的是: float (*q)[100],(*s)[100]; *q=*TIME(&U_1[0][0]);*s=*time(&U_2[0][0]); 对二维数组作为指针的内容不是很会,还请各位大神指点
C语言中字符数组作为函数返回值出现的问题
之前在这里问过这个问题,但可能是表述不清,收效甚微,今天再次提出这个问题,希望各位知情者能帮我解答一下,谢谢! 下面将简化后的代码贴出来: ```c #include <stdio.h> #define N 4 char *char_array(int n); int print_array(char *p, int n); int main(void) { char *p = NULL; p = char_array(N); print_array(p, N); return 0; } char *char_array(int n) { static char test[N] = {0}; int i = 0; for(i = 0; i < n; i++) test[i] = 'A'; return test; } int print_array(char *p, int n) { int i = 0; for(i = 0; i < n; i++) putchar(*(p+i)); putchar('\n'); return 0; } ``` 在子函数中字符数组做静态声明,是为了返回的数组首地址所指的那片内存不会因为子函数的调用完成而被释放掉。 下面贴出单步调试的过程: 设置断点,单步调试 ![断点调试](https://img-ask.csdn.net/upload/201705/10/1494405625_269125.png) 这是在return数组首地址之前看到的,数组元素正常 ![before return](https://img-ask.csdn.net/upload/201705/10/1494405713_786345.png) 这是在return后,从返回的首地址读取数组得到的,可以看到数组末尾多出了一个0x01的元素 ![after return](https://img-ask.csdn.net/upload/201705/10/1494405823_176945.png) 打开数组首地址对应的内存地址,可以清楚看到 ![memory](https://img-ask.csdn.net/upload/201705/10/1494405891_666688.png) 如果编译器将字符数组作为字符串的一种形式进行处理,在得到字符串的首地址之后,会向后一直搜索,直到搜索到'\0'为止,也可以理解,因为0x01后面就是'\0',但是为什么每次运行程序,后面都会多出一个0x01,而不是其他的什么字符,出现一次是巧合,但每次出现算是问题了吧。 希望有知道其中原因的能帮我解答一下,两个问题: 1.为什么后面会多一个元素? 2.为什么这个元素是0x01? 谢谢!
c++函数返回值是数组问题
比如现在要求定义一个函数fun(),在主函数调用时直接用fun();就能输出在fun函数里定义好的一个字符串,那要fun函数的返回值怎么返回才行,为什么我返回指针但打印出来却不是正确结果?求大神解释
C语言编程(二维数组,调用函数)
编写程序:输入一个3行4列的二维数组的元素值,调用一个自定义函数求二维数组每列元素中的最小值的和值,和值通过返回值传回主函数输出
double数组的第一个值调用函数中和调用函数后不一样?
请教大家一个C语言问题 这是一个txt 内容: 0.992 1.029 1.074 1.120 1.008 1.018 0.974 0.980 0.982 0.957 0.862 0.975 1.049 1.047 1.038 0.959 1.011 1.017 1.007 0.963 我用fscanf方法读取成double类型的数组 并且在读取的函数中打印了一次 在函数中打印出来是正常的 但是一旦读取成功 数组的第一个值就变了 从0.992变成了0.4 为什么会出现这种情况呢? 在函数中打印出来是这样的:0.992 1.029 1.074 1.120...... 读取完成后,打印出来是这样:0.400 1.029 1.074 1.120...... 第一个数变化了。 这是读取的方法: int readENSEMBLEtxt_to_doublearray(double a[]) { //double v[20];//开一个足够大的数组。 int i = 0,j; FILE *fpensem;//文件指针 fpensem = fopen(BGC_PATH, "r");//以文本方式打开文件。 if(fpensem == NULL) //打开文件出错。 return -1; //while(fscanf(fpensem, " %lf", &a[i]) != EOF) //读取数据到数组,直到文件结尾(返回EOF) // i++; //fclose(fpensem);//关闭文件 while(!feof(fpensem)) { fscanf(fpensem,"%lf",&a[i]); ++i; } fclose(fpensem);//关闭文件 for(j = 0; j < i; j ++)//循环输出数组元素。 { printf("%lf ", a[j]); } printf("\r\n"); return 0; } 下面是相关的调用过程: double ensemble[20]={0}; readENSEMBLEtxt_to_doublearray(ensemble); 如果 我把这个函数和调用过程,从我原来的程序中,抽出来,结果是对的。但是在我的程序中,一模一样的内容,出来后第一个数字变化了,这里是在Visual Studio里面。BGC_PATH,是我定义的一个宏:#define BGC_PATH "F:\\Biome-BGC\\biomebgc-4.2\\biomebgc-4.2\\generateEnsemble.txt"。原来的程序是个比较大的生态模型。
LUA 读取C#中返回值为数组的函数
请教大师们,一个问题:我在C#中写了一个返回值为数组的函数float[] data_handle1() ,想在Lua中调用此函数?在lua 中如何操作读取这个函数的返回值呢?C# 的函数具体代码如下: public float[] data_handle1() //串口20个字节回复字节解析 { ……………………………………………………………… float[] i = new float[8]; int p = 0; for (int loop = 2; loop < 18; loop++) { i[p] = data[loop] * 256 + data[loop + 1]; loop = loop + 1; p++; } return i; } 在lua中的代码如下: local k={n=8} local t={n=8} k = data_handle1() for i=1,8,1 do t[i]=k[i] MessageBox("未收到返113351") end 运行到读取K值时就一直报错,请问怎么写
数组为空时,返回什么值比较合适
一个int函数,作用是找出数组的中值,找到这个中值,并return中值。 我想问的问题是: 如果数组为空,我应该return什么值比较合适,比如我想数组为空时,return -1; 但是这样的话函数调用者就无法知道-1是中值,还是数组为空。 如果没有合适return的值,我应该用异常处理机制吗? 大家都是用什么方法解决这个问题的?
基础的C语言小问题,定义函数
定义一个无参函数 void lr(int CJ[],int n) 其中这个 (int CJ[],int n) 怎么理解 (1)在程序中定义一个全局变量N用于存放学生人数,再定义一个一维的全局数组CJ[100],用于存放学生成绩。 (2)编写一个成绩录入函数lr(),lr()是没有返回值的无参函数。函数中首先输入学生人数放入全局变量N中,再录入N个学生的成绩(下标对应学生的学号1~N),放到全局数组CJ[100]中。(录入时要提示输入几号学生的成绩,成绩录完时要提示“成绩已经录完!”) (3)编写一个打印成绩函数dy(),dy()是没有返回值的无参函数,功能是根据N的值输出全局数组CJ[100]中的N个学生的学号和成绩。 (4)在主函数中调用函数lr(),录入5个学生的成绩,然后调用函数dy(),输出这5个学生的学号和成绩。 这个题写了一半,没有思路了,求救一下大佬们
指针找最大值和次最大值
运用指针变量,在主函数中输入一个数组,在调用函数中找出数组的最大值和次最大值,返回主函数输出
基础的C语言前来求助大佬们
这个写了一半写不出来,void函数调用不了,下面是这个问题 (1)在程序中定义一个全局变量N用于存放学生人数,再定义一个一维的全局数组CJ[100],用于存放学生成绩。 (2)编写一个成绩录入函数lr(),lr()是没有返回值的无参函数。函数中首先输入学生人数放入全局变量N中,再录入N个学生的成绩(下标对应学生的学号1~N),放到全局数组CJ[100]中。(录入时要提示输入几号学生的成绩,成绩录完时要提示“成绩已经录完!”) (3)编写一个打印成绩函数dy(),dy()是没有返回值的无参函数,功能是根据N的值输出全局数组CJ[100]中的N个学生的学号和成绩。 (4)在主函数中调用函数lr(),录入5个学生的成绩,然后调用函数dy(),输出这5个学生的学号和成绩。
C语言在数组中调用函数
#include<stdio.h> #define N 40 long Aver(int score[],int sum,int n); void FindMax(int score[],long num[],int n,int *pMaxScore,long *pMaxNum); void FindMin(int score[],long num[],int n,int *pMaxScore,long *pMaxNum); void Ascendingsort(int a,int n); void Descendingsort(int a,int n); void Swap(int *x,int *y); int main() { int score[N],maxScore,minScore; int n,i,sum; long num[N],maxNum,minNum,aver; printf("请输入学生数目:"); scanf("%d",&n); printf("Input student's ID and score:\n"); for(i=0;i<n;i++) { scanf("%ld%d",&num[i],&score[i]); if(score[i]>90) printf("优秀\n"); else if(score[i]>=80&&score[i]<=89) printf("良好\n"); else if(score[i]<60) printf("不及格\n"); else printf("及格\n"); } FindMax(score,num,n,&maxScore,&maxNum); printf("maxScore=%d,maxNum is %ld\n",maxScore,maxNum); FindMin(score,num,n,&minScore,&minNum); printf("minScore=%d,minNum is %ld\n",minScore,minNum); aver=Aver(score,sum,n); return 0; } /**************************************************************************** 函数功能:输出最高成绩及学号 ***************************************************************************/ void FindMax(int score[],long num[],int n,int *pMaxScore,long *pMaxNum) { int i; *pMaxScore=score[0]; *pMaxNum=num[0]; for(i=1;i<n;i++) { if(score[i]>*pMaxScore) { *pMaxScore=score[i]; *pMaxNum=num[i]; } } } /**************************************** 函数功能:输出最低分及其学号 ****************************************/ void FindMin(int score[],long num[],int n,int *pMinScore,long *pMinNum) { int i; *pMinScore=score[0]; *pMinNum=num[0]; for(i=1;i<n;i++) { if(score[i]<*pMinScore) { *pMinScore=score[i]; *pMinNum=num[i]; } } } /**************************************************************** 函数功能:计算总成绩的平均分 ****************************************************************/ long Aver(int score[],int sum,int n) { int i,average; sum=0; for(i=0;i<n;i++) { sum+=score[i]; } average=sum/n; printf("总分为%d\n",sum); printf("平均分为%d\n",average); } 每次调试平均数函数(最后一个函数)都不对,想问问错在哪了,说是要返回一个值,返回哪个值。
python 调用dll如何返回多个值
import scipy.io as scio import os import ctypes import datetime import numpy as np #读取dll文件 #这里的地址目录是HessianFilter.dll所在的文件夹 start = datetime.datetime.now() cur_path = os.path.dirname(r'C:\Users\Administrator\Desktop\code_and_data\code\HessianFilter\\') dll_path = os.path.join(cur_path,'HessianFilter.dll') print dll_path dll = ctypes.windll.LoadLibrary(dll_path) #读取mat文件,Mat文件所在的文件夹中读取 matPath = r'C:\Users\Administrator\Desktop\code_and_data\data\Nodule19664.mat' imgData = scio.loadmat(matPath) #从mat文件中我们取到了整个三维数组 imgDataArray = imgData['imagetest1'] #得到数组文件的参数:宽,高,层数 widthSrc,heightSrc,sliceNumSrc = imgDataArray.shape #声明一个三维的c_float类型的数组,用于存放mat数据,并将数据转化为c_float imgDataArray_p = (((ctypes.c_float*sliceNumSrc)*heightSrc)*widthSrc)() for i in range(widthSrc): for j in range(heightSrc): for k in range(sliceNumSrc): imgDataArray_p[i][j][k] = ctypes.c_float(imgDataArray[i][j][k]) imgDataP = ctypes.POINTER(ctypes.c_float)(imgDataArray_p) print '---------->' #需要再声明两个返回值 HessianDot = (ctypes.c_float*(widthSrc*heightSrc*sliceNumSrc))() HessianLine = (ctypes.c_float*(widthSrc*heightSrc*sliceNumSrc))() HessianDot_p = ctypes.POINTER(ctypes.c_float)(HessianDot) HessianLine_p = ctypes.POINTER(ctypes.c_float)(HessianLine) #定义一个常数 sigma = ctypes.c_float(8) #定义一个三维数组 imgSize = [widthSrc,heightSrc,sliceNumSrc] imageSize = (ctypes.c_float*len(imgSize))(*imgSize) #定义一个指向三维数组的指针 imageSizeP = ctypes.POINTER(ctypes.c_float)(imageSize) #这个就是调用dll中的函数了 dll.RunHessianMultiThread(ctypes.byref(imgDataArray_p),sigma,ctypes.byref(imageSizeP),ctypes.byref(HessianDot_p),ctypes.byref(HessianLine_p),4) print '--调用后-点数据--' print HessianDot_p print HessianDot_p[0:24] #print HessianDot_p.contents print '--调用后-线数据--' print HessianLine_p print HessianLine_p[0:24] #print HessianLine_p.contents print '<---------Over------------->\n\n' print datetime.datetime.now()-start
QT 使用子函数,进行mysql进行查询,返回一个类数组。
运行环境: QT4.8 Linux: Ubuntu 12.04.5 想完成的功能:用子函数传入参数,查询出多条记录,每条参数记录在定义好的类中,这个子函数返回这个类数组。 各位大哥,救救孩子,毕设写到这里就嗝屁了,我开始用的想法是返回一个 QString类型的数组,代码如下: ``` QString *selectStudentAndClass(QString holdno){ qDebug()<<"\n\n-----into selectStudentAndClass OK -----"; Student find; getStudent(QStoCH(holdno),find); QSqlQuery query; QString stu_no[50] = ""; QString l_stu_no; int count = 0 ; QString dbyuju1 = QString("SELECT US_W_CL.STU_NO FROM US_W_CL WHERE US_W_CL.SWC_NUNBER = (SELECT US_W_CL.SWC_NUNBER FROM US_W_CL WHERE US_W_CL.STU_NO = \"%1\")") .arg(find.STU_NO); qDebug()<<"select US_W_CL.SWC_NUNBER sql:"<<dbyuju1; query.exec(dbyuju1); while(query.next()){ l_stu_no = query.value(0).toString(); if(l_stu_no.isEmpty()){ qDebug() <<"select US_W_CL.l_stu_no ERROR " ; return 0; } else{ qDebug() <<"select US_W_CL.l_stu_no is :"<<l_stu_no ; stu_no[count] = l_stu_no; qDebug() <<"***select US_W_CL.l_stu_no is :***"<<stu_no[count]<<"count is :"<<count; // stu_no[++count] = "\0"; count ++; } } count = 0; while(!stu_no[count].isEmpty()){ qDebug() <<"stu_no[count]:"<<stu_no[count]<<"count is :"<<count; count++; } qDebug()<<"-----into selectStudentAndClass end -----\n"; return stu_no; } ``` 但是好像内存泄漏了,主函数中使用这个函数之后,虽然可以得到返回的值,可是调用这个值就会程序崩溃,我也崩溃了。救救孩子!!!
C++类与指针函数的小问题
最近开始学习C++,看到了一小段程序,不是很理解,问问大神们。 函数意思是先调用setName() ,传入一个字符型数组,然后再调用getName() 获取数组。 可是该函数getName() 为指针型函数,那么为什么返回值不是一个地址,而是一个字符串?? ``` char* CPerson::getName() { std::cout<<m_cName<<std::endl; return m_cName; //函数为指针型函数,那么为什么返回值不是一个地址,而是一个字符串?? } int CPerson::setName(char cName[25]) { strcpy(m_cName,cName); return 0; //执行成功返回0 } ```
为什么调用函数参与运算再给变量赋值,数就不对了
求线性回归方程a和b值,结果明显不对 代码如下 #include <stdio.h> //调用库函数 int main() //主函数 { float aver(float a[],int); //声明求均值函数 float Temp_X[96] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.46667, 11.4667, 31.6, 52.7333, 80.3333, 116.333, 156.6, 199.4, 242.2, 283.4, 329.2, 379.333, 431.333, 482.6, 541, 594.4, 643.533, 692.133, 736.267, 772.667, 810.133, 841.867, 868.2, 892.4, 917.667, 939.8, 954.667, 969, 976.8, 983.4, 987.467, 994.933, 1023.67, 875.2, 873.933, 758.8, 678.2, 515.867, 782.533, 908.8, 779.2, 831.4, 645.533, 734.067, 679.533, 610.267, 565.067, 512.467, 462, 405.2, 354.133, 302, 247.8, 191.533, 140, 94.2667, 57.5333, 25.9333, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //定义初始化数组X float Temp_Y[96] = {0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 1.785, 2.57833, 3.927, 5.79233, 7.379, 9.48133, 11.1473, 12.4167, 13.6627, 16.193701, 18.248699, 19.042, 19.042, 19.105301, 16.6383, 17.240999, 14.631, 11.8217, 11.663, 12.155, 15.488, 21.859301, 19.32, 19.042, 19.6133, 21.105, 22.9937, 20.827299, 23.858299, 23.0333, 19.2883, 15.6937, 21.5893, 23.802999, 20.518299, 21.5893, 17.907301, 17.971001, 17.574301, 16.781, 15.5513, 12.3773, 10.2747, 8.60867, 6.86333, 5.39567, 3.88767, 2.856, 2.142, 2.142, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952 }; //定义初始化数组Y float a,b,sum1=0,sum2=0; //定义变量,a,b为线性回归方程y=ax+b中a,b的值,sum1,sum2,为求a时分步求解用的变量 int i,j; //i,j为循环时使用的变量 for(i=0;i<96;i++) { sum1+=(Temp_X[i]*Temp_Y[i]); sum2+=(Temp_X[i]*Temp_X[i]); } a=(sum1-96*aver(Temp_X,96)*aver(Temp_Y,96))/(sum2-96*aver(Temp_X,96)*aver(Temp_X,96)); //通过线性回归方程公式求出a值 b=aver(Temp_Y,96)-(a*aver(Temp_X,96)); printf("a=%f,b=%f",a,b); } float aver(float a[],int n) //求均值的函数 { //用for循环求出所有值的和,再除以个数n int i; float sum; for(i=0;i<n;i++) { sum+=a[i]; } return sum/n; //返回结果 }
C语言编程问题求帮助!
编写函数int delnum(int *a , int num , int n),用于在长度是n的数组a中,删除一个值为num的元素。删除后数组的长度作为函数的返回值返回。注意,num在数组中可能不只一个。 主函数如下: # define N 10 int main( ) { int a[N],i,num,m; scanf(“%d”,&num); 键盘输入N个数到数组a中; m=delnum函数调用,在数组a中删除指定的数num,并返回剩余数据个数; 输出删除了num后的数组a; return 0; } 定义并编写delnum函数
将sklearn的标准化函数封装供Qt调用为什么成功不了?
如代码所示,我将sklearn标准化函数封装起来QT调用返回为空 ``` def StandardScalarTransformer(Xarray): from sklearn.preprocessing import StandardScaler clf=StandardScaler() X=clf.fit_transform(Xarray) # X=Xarray return (X,) ``` ![图片说明](https://img-ask.csdn.net/upload/201907/08/1562576071_255584.png)![图片说明](https://img-ask.csdn.net/upload/201907/08/1562576103_985294.png)! 但是如果是将数组原封不动的返回,其他语句都注释掉,程序是可以正常返回值的 ``` def StandardScalarTransformer(Xarray): # from sklearn.preprocessing import StandardScaler # clf=StandardScaler() # X=clf.fit_transform(Xarray) X=Xarray return (X,) ``` ![图片说明](https://img-ask.csdn.net/upload/201907/08/1562576161_867230.png) 请问我是不是哪个地方配置不对
Xposed开发 如何修改通过参数传值的函数的参数?
如题,比如我要HOOK一个函数 ![图片说明](https://img-ask.csdn.net/upload/201603/19/1458372035_286716.png) 其返回值是一个int类型,表示读取到byte[] b里面的内容的长度,而真正的内容在byte[] b里面,通过参数传递的。在函数执行前byte[] b是一个长度为1024的空数组。 执行后b读取到内容。 我想获取函数执行后b的内容并修改,但是失败了 ![图片说明](https://img-ask.csdn.net/upload/201603/19/1458372086_850358.png) 按道理来说第一次的log应当能记录下函数执行后b的实际值,即函数所要传递的内容,但是得到的却是长度为1024的空数组。 第二次log确实得到了修改后的“read method was hooked!!!!”,但是在应用中调用这个方法时并没有显示这句话,和hook之前一样。 我的想法是xposed只保存了函数调用前的参数,函数调用后无法再对参数做出变更。 那么请问我该如何达到我的目的?
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
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...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问