1、
#include<stdio.h>
main() {
int k,j,s;
for(k=2;k<6;k++,k++) {
s =1;
for(j=k;j<6;j++)
s+=j;
printf("%d\n",s);
}
// printf("%d\n",s);
}
输出结果:15
10
//10
2、 定义int t[3][2],能正确表示t数组元素地址的表达式t[2].(相当于t[2][0])
3、 函数类型不能作为重载函数的调用的依据。
(如果一个类中声明了纯虚函数,其派生类中没有对该函数定义,那该函数在派生类中仍为纯虚函数,凡是包含纯虚函数的类都是抽象类,不能用来定义对象。
通常重载函数调用的依据是函数名,参数类型,参数个数。
类的静态成员是属于类的而不是属于哪个对象的,因此可以说是所有对象所共有的。
内联函数是在编译时将目标代码插入的。)
如果在派生类中没有对所有纯虚函数进行定义,则此派生类仍然是抽象类,不能用来定义对象。
静态数据成员是所有对象所共有的。
内联函数在编译时将该函数的目标代码插入每个调用该函数的地方。
4、
#include<iostream>
#include<string.h>
using namespace std;
int main() {
char p1[10]="abcd",*p2,*p3,str[10]="xyz";
p2="ABCD";
p3=strcat(p1+2,p2+1);
cout<<p1<<endl<<p3<<endl;
strcpy(str+2,p3);
cout<<str<<endl;
}
输出的结果: abcdBCD
分析:
原型:char *strcat ( char *dest, const char *src)
用法:#include <string.h>
功能:连接两个字符串;strcat()会将参数src字符串 拷贝到 参数dest所指的字符串尾。 第一个参数dest要有足够的空间来容纳要拷贝的字符串。
说明:strcat()返回dest的字符串起始地址。
strcat 是连接函数, strcpy 是拷贝函数。(不记得可百度查下)。
strcat(p1 + 2, p2 + 1))返回值是p1+2的地址(指针),而不是P1的地址。可以用程序测试,如下图。
先执行strcat(p1 + 2 , p2 + 1),结果:cdBCD。strcpy之后的str就是xycdBCD。
5、
#include<iostream>
void test(void *data) {
unsigned int value = *((unsigned int *) data);//填空的地方
printf("%u",value);
}
using namespace std;
int main() {
unsigned int value =10;
test(&value);
return 0;
}
分析1:void test(void *data) 注意,参数类型是void,所以先要进行指针转换:(unsigned int *),然后再取值。
分析2:参数是void *,编译器不知道它的具体数值类型,不能直接取值;先转换为具体指针类型,然后再取值。
分析3:data无类型指针,故要先转换指针为unsigned int指针,再取地址。
实际上只要是*data,我们就知道了它是指针,如果是32位机器,该指针就指着内存中的某个地址,用32位表示,记住这个32位只是初始地址,任何指针都是的。而前面的void 或者int 类型是定义一次读几个字节,如果是int则读4个字节,也就是从*data存的地址开始从内存往后读4个字节就行,而void是空,没有指定要读多少个字节,所以要用指针类型(unsigned int *)强制转化为知道要读几个字节的int指针,然后再用*从开始地址,读取unsigned int个字节出来!
6、int *pa[5];//表示指针数组,指一个数组里装着指针
int (*pa)[5];//表示数组指针,表示一个指向数组的指针
数组运算符优先级高于指针和引用。
7、new 和 malloc
new建立的是一个对象;malloc分配的是一块内存;
new初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数;malloc仅仅分配内存,free仅仅回收内存;
new和malloc都可用于申请动态内存,new是一个操作符;malloc是一个函数;
new/delete都是内建的操作符;而malloc是一个函数,其函数原型void *malloc(unsigned int num_bytes);因此malloc需要头文件"stdlib.h"或者"malloc.h"
new 和malloc的区别(整理)
1,malloc与free是C++/ C语言 的标准库函数,new/delete是 C++ 的运算符。它们都可用于申请动态和释放内存。
2. new 初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数,malloc仅仅分配内存,free仅仅回收内存 。
3、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。
4.new delete 是运算符,malloc,free是库函数。
5. new 建立的是一个对象, malloc分配的是一块内存。
6. malloc需要头文件"stdlib.h"或者"malloc.h" 。
8、
#include<stdio.h>
int inc(int a) {
return (++a);
}
int multi(int *a,int *b,int *c) {
return (*c=*a * *b);
}
typedef int (* FUNC1)(int in);//函数指针定义
typedef int (* FUNC2) (int *,int *,int *);
void show(FUNC2 fun,int arg1,int *arg2) {
FUNC1 p = &inc;//FUNC1类型 函数指针p指向函数inc的首地址
int temp = p(arg1);//此时调用函数inc,参数为10,返回值为11
fun(&temp,&arg1,arg2);//调用函数multi,参数为(11,10,arg2),arg2为指针变量负责带回返回值
printf("%d\n",*arg2);//输出110
}
int main() {
int a;
show(multi,10,&a);//FUNC2类型函数指针fun指向函数multi的首地址
return 0;
}
输出结果:110